package servlet;

import org.apache.commons.lang3.StringUtils;
import pojo.Cart;
import pojo.Product;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;

@WebServlet("/cart")
public class CartServlet extends HttpServlet {
    // 1. 得到请求参数cmd的值，根据不同的cmd值调用不同的方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.1 得到请求参数cmd的值
        String cmd = req.getParameter("cmd");
        if (StringUtils.isNotBlank(cmd)){
            // 1.2 将商品添加到购物车
            if ("add".equals(cmd)){
                add(req,resp);
            }
            // 1.3 将购物车里面的商品删除
            if ("remove".equals(cmd)){
                remove(req,resp);
            }
            // 1.4 清空购物车
            if ("clear".equals(cmd)){
                clear(req,resp);
            }
        }
    }

    //2. 将商品添加到购物车
    private void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 2.1 根据传入过来的pid的值得到对应的商品
        // 2.1.1 先得到传入过来的pid
        String pid = req.getParameter("pid");
        // 2.1.2 得到servletContext对象
        ServletContext servletContext = req.getServletContext();
        // 2.1.3 得到servletContext对象里面的Map集合
        Map<String, Product> products = (Map<String, Product>) servletContext.getAttribute("products");
        // 2.1.4 在集合中根据pid得到具体的对象
        Product product = products.get(pid);

        // 2.2 将得到的商品对象添加到购物车中
        // 2.2.1 先得到一个session对象，购物车放在session中，只要页面不关闭购物车就不会消失
        HttpSession session = req.getSession();
        // 2.2.2 得到购物车对象
        Cart cart = (Cart) session.getAttribute("cart");
        // 2.2.3 如果是第一次创建购物车就创建一个购物车
        if (cart == null){
            cart = new Cart();
        }
        // 2.2.4 将得到的商品放入到购物车中
        cart.add(product);
        // 2.2.5 将购物车放到session对象中保存
        session.setAttribute("cart",cart);

        // 2.3 跳转到购物车页面
        resp.sendRedirect("/cart_list.jsp");
    }

    // 3. 删除购物车中的商品
    private void remove(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 3.1 得到商品pid
        String pid = req.getParameter("pid");
        // 3.2 得到购物车对象
        HttpSession session = req.getSession();
        Cart cart = (Cart) session.getAttribute("cart");
        // 3.3 从购物车中删除这个商品
        cart.remove(pid);
        // 3.4 跳转到购物车页面
        resp.sendRedirect("/cart_list.jsp");
    }

    // 4. 清空购物车
    private void clear(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 4.1 得到购物车对象
        HttpSession session = req.getSession();
        Cart cart = (Cart) session.getAttribute("cart");
        // 4.2 清空购物车
        cart.clear();
        // 4.3 跳转到购物车页面
        resp.sendRedirect("/cart_list.jsp");
    }

}
